package com.ruoyi.post.service;

import java.util.List;

import com.ruoyi.post.domain.PostBasicInfo;
import com.ruoyi.post.domain.PostCommentInfo;

/**
 * 帖子管理Service接口
 *
 * @author 区嘉盛
 * @date 2025-06-10
 */
public interface IPostBasicInfoService {
    /**
     * 查询帖子管理
     *
     * @param id 帖子管理主键
     * @return 帖子管理
     */
    public PostBasicInfo selectPostBasicInfoById(Long id);

    /**
     * 查询帖子管理列表
     *
     * @param postBasicInfo 帖子管理
     * @return 帖子管理集合
     */
    public List<PostBasicInfo> selectPostBasicInfoList(PostBasicInfo postBasicInfo);

    /**
     * 新增帖子管理
     *
     * @param postBasicInfo 帖子管理
     * @return 结果
     */
    public int insertPostBasicInfo(PostBasicInfo postBasicInfo);

    /**
     * 修改帖子管理
     *
     * @param postBasicInfo 帖子管理
     * @return 结果
     */
    public int updatePostBasicInfo(PostBasicInfo postBasicInfo);

    /**
     * 批量删除帖子管理
     *
     * @param ids 需要删除的帖子管理主键集合
     * @return 结果
     */
    public int deletePostBasicInfoByIds(Long[] ids);

    /**
     * 删除帖子管理信息
     *
     * @param id 帖子管理主键
     * @return 结果
     */
    public int deletePostBasicInfoById(Long id);

    /**
     * 用户发布帖子
     *
     * @param postBasicInfo 帖子信息
     * @param isDraft       是否为草稿
     * @return 结果
     */
    public int publishPost(PostBasicInfo postBasicInfo, boolean isDraft);

    int savePostDraft(PostBasicInfo postBasicInfo);

    /**
     * 用户删除自己的帖子
     *
     * @param postId 帖子ID
     * @param userId 用户ID
     * @return 结果
     */
    public int deleteUserPost(Long postId, Long userId);

    /**
     * 根据圈子ID查询帖子列表
     *
     * @param circleId 圈子ID
     * @return 帖子列表
     */
    public List<PostBasicInfo> selectPostsByCircleId(Long circleId);

    /**
     * 查询用户的帖子列表
     *
     * @param userId 用户ID
     * @return 帖子列表
     */
    public List<PostBasicInfo> selectPostsByUserId(Long userId);

    /**
     * 帖子点赞/取消点赞
     *
     * @param postId 帖子ID
     * @param userId 用户ID
     * @return 结果
     */
    public int togglePostLike(Long postId, Long userId);

    /**
     * 帖子收藏/取消收藏
     *
     * @param postId 帖子ID
     * @param userId 用户ID
     * @return 结果
     */
    public int togglePostFavorite(Long postId, Long userId);

    /**
     * 发表评论
     *
     * @param postCommentInfo 评论信息
     * @return 结果
     */
    public int addComment(PostCommentInfo postCommentInfo, boolean isDraft);

    /**
     * 查询帖子评论列表
     *
     * @param postId 帖子ID
     * @return 评论列表
     */
    public List<PostCommentInfo> selectCommentsByPostId(Long postId);

    /**
     * 查询用户收藏的帖子列表
     *
     * @param userId 用户ID
     * @return 收藏的帖子列表
     */
    public List<PostBasicInfo> selectFavoritePostsByUserId(Long userId);

    /**
     * 用户删除自己的评论
     *
     * @param commentId 评论ID
     * @param userId    用户ID
     * @return 结果
     */
    public int deleteUserComment(Long commentId, Long userId);

    /**
     * 评论点赞/取消点赞
     *
     * @param commentId 评论ID
     * @param userId    用户ID
     * @return 结果
     */
    public int toggleCommentLike(Long commentId, Long userId);

    /**
     * AI审核帖子内容
     *
     * @param postTitle   帖子标题
     * @param postContent 帖子内容
     * @return 审核结果
     */
    public String auditPostContent(String postTitle, String postContent);

    /**
     * AI审核评论内容
     *
     * @param commentContent 评论内容
     * @return 审核结果
     */
    public String auditCommentContent(String commentContent);

    /**
     * 根据帖子编码获取最新帖子
     *
     * @param postCode 帖子编码
     * @return 帖子信息
     */
    public PostBasicInfo getNewPost(String postCode);

    /**
     * 给用户查询笔记、收藏、点赞的帖子
     *
     * @param type 1:笔记 2:收藏 3:点赞
     * @param userId 用户ID
     * @return 帖子列表
     */
    public List<PostBasicInfo> getPostForUser(Long type, Long userId);

    /**
     * 获取用户点赞的帖子ID列表
     *
     * @param userId 用户ID
     * @return 点赞的帖子ID列表
     */
    public List<Integer> getUserLikedPostIds(Long userId);

    /**
     * 获取用户收藏的帖子ID列表
     *
     * @param userId 用户ID
     * @return 收藏的帖子ID列表
     */
    public List<Integer> getUserFavoritePostIds(Long userId);

    /**
     * 根据帖子标题获取帖子
     *
     * @param postTitle 帖子标题
     * @return 帖子信息
     */
    public List<PostBasicInfo> getPostByPostTitle(String postTitle);

    PostBasicInfo getPostDraft(Long authorUserId);


    /**
     * 发布帖子并设置标签关联（事务性操作）
     *
     * @param postBasicInfo 帖子信息
     * @param tagIds 标签ID列表
     * @return 结果
     */
    public int publishPostWithTags(PostBasicInfo postBasicInfo, List<Long> tagIds);

    List<Long> getUserCommentLikedByPostId(Long postId, Long userId);
}
